﻿/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#ifndef __AD9DF3EC_28B2_44C6_A3BF_2D6922A0F92A__
#define __AD9DF3EC_28B2_44C6_A3BF_2D6922A0F92A__

// DRIVER={MySQL ODBC 5.3 ANSI Driver};SERVER=192.168.80.131;PORT=3306;DATABASE=javadb;UID=root;PWD=root;CharSet=UTF8;

namespace xos_odbc
{

    class i_operation;

    /////////////////////////////////////////////////////////////////////////////////
    // 
    // 字段管理及绑定帮助功能接口
    // 
    class i_fields : public xos::i_release
    {
    public:
        virtual ~i_fields(){}

    public:
        // 
        // 添加整数字段
        // 
        virtual int push( const char * lpszName, xos::xos_i32 * lpData, bool bIsKey ) = 0;
        // 
        // 添加短整数字段
        // 
        virtual int push( const char * lpszName, xos::xos_i64 * lpData ) = 0;
        // 
        // 添加短整数字段
        // 
        virtual int push( const char * lpszName, xos::xos_i16 * lpData ) = 0;
        // 
        // 添加字节字段
        // 
        virtual int push( const char * lpszName, xos::xos_i8 * lpData ) = 0;
        // 
        // 添加整数字段
        // 
        virtual int push( const char * lpszName, xos::xos_u32 * lpData, bool bIsKey ) = 0;
        // 
        // 添加短整数字段
        // 
        virtual int push( const char * lpszName, xos::xos_u64 * lpData ) = 0;
        // 
        // 添加短整数字段
        // 
        virtual int push( const char * lpszName, xos::xos_u16 * lpData ) = 0;
        // 
        // 添加字节字段
        // 
        virtual int push( const char * lpszName, xos::xos_u8 * lpData ) = 0;
        // 
        // 添加bool字段
        // 
        virtual int push( const char * lpszName, bool * lpData ) = 0;
        // 
        // 添加字串字段
        // 
        virtual int push( const char * lpszName, char * lpData, int nBufSize ) = 0;
        // 
        // 添加float字段
        // 
        virtual int push( const char * lpszName, float * lpData, int nDigitNum ) = 0;
        // 
        // 添加double字段
        // 
        virtual int push( const char * lpszName, double * lpData, int nDigitNum ) = 0;

        // 
        // 设置为更改过
        // 
        virtual int set_dirty( const char * lpszName ) = 0;
        // 
        // 设置为更改过
        // 
        virtual int set_dirty( int nIndex ) = 0;
        // 
        // 设置为改过
        // 
        virtual int set_all_dirty() = 0;
        // 
        // 恢复为没改过
        // 
        virtual int clear_dirty( const char * lpszName ) = 0;
        // 
        // 恢复为没改过
        // 
        virtual int clear_dirty( int nIndex ) = 0;
        // 
        // 恢复为没改过
        // 
        virtual int clear_all_dirty() = 0;

        // 
        // 设置表名
        // 
        virtual int set_table_name( const char * lpszTableName ) = 0;

        //
        // 编译sql
        // 
        //  0 : success. 
        //  1 : running. 
        // -1 : failed
        // 
        virtual int prepare_sql() = 0;
        virtual int execute() = 0;
        virtual int clear() = 0;
        // 
        //  0 : success
        //  1 : pending
        //  2 : no data
        // -1 : failed
        // 
        virtual int fetch() = 0;
        // 
        // 准备查询.
        // 
        // lpszSql说明：
        // 
        //  not null : where子句。如：where id = 1
        //      null : 全表查询
        // 
        virtual int prepare_query( const char * lpszSql ) = 0;
        virtual int bind_query() = 0;
        // 
        // 准备修改
        // 
        virtual int prepare_update() = 0;
        // 
        // 准备添加
        // 
        virtual int prepare_add() = 0;
        // 
        // 准备删除
        // 
        virtual int prepare_del() = 0;
        // 
        // 帮助方法
        // 
        virtual int set_id( xos::xos_i32 id ) = 0;
        virtual const char * sql() = 0;
    };

} // xos_odbc

#endif // __AD9DF3EC_28B2_44C6_A3BF_2D6922A0F92A__
